#include <stdio.h>
#include <cstdlib>
#define InitSize 10
typedef struct SeqList
{
    int *data;
    int MaxSize;
    int length;
} SeqList;

void InitList(SeqList &L)
{
    L.data = (int *)malloc(InitSize * sizeof(int)); // 开辟 默认最大程度*数据类型大小 的内存空间，返回表头指针
    L.length = 0;                                   // 当前已有数据储量(顺序表表长)
    L.MaxSize = InitSize;                           // 顺序表最大容量
    for (int i = 0; i < InitSize; i++)
    {
        L.data[i] = 0;
    }
}

int IncreaseSize(SeqList &L, int len)
{
    // 若减少表的操作导致表长度小于等于0或者操作数为0则会直接停止执行
    if (L.MaxSize + len <= 0 || len == 0)
    {
        printf("Error Num\n");
        return 0;
    }
    int *p = L.data;                                         // 临时存储旧表内容
    L.data = (int *)malloc((L.MaxSize + len) * sizeof(int)); // 开辟新的加长后的空间，返回表头指针
    L.MaxSize += len;                                        // 更新长度
    for (int i = 0; i < L.MaxSize; i++)
    {
        if ((i < L.MaxSize - len && len > 0) || len < 0) // 将旧表内容放入新表
        {
            L.data[i] = p[i];
        }
        else // 新内容初始化
        {
            L.data[i] = 0;
        }
    }
    free(p); // 释放临时存储空间
}

void ForPrintf(SeqList L)
{
    for (int i = 0; i < L.MaxSize; i++)
    {
        printf("L.data[%d]=%d\n", i, L.data[i]);
    }
}

int main()
{
    // 创建表
    SeqList L;
    // 初始化
    InitList(L);
    // 插入数据
    L.data[3] = 10;
    L.data[6] = 9;
    L.data[8] = 3;
    // 输出表内容
    ForPrintf(L);

    printf("----------------\n");

    // 扩表
    IncreaseSize(L, 5);
    // 输出表内容
    ForPrintf(L);
    return 0;
}